home *** CD-ROM | disk | FTP | other *** search
/ PCMania 21 / PCMania CD21.nrg / mystdemo.inf < prev    next >
INI File  |  1994-06-01  |  31KB  |  1,226 lines

  1. ;;====================================================================
  2. ;;  Files processing module.  All file and directory tasks required for
  3. ;;  the installation should be centralized in this module.
  4. ;;====================================================================
  5.  
  6. ;;====================================================================
  7. ;;
  8. ;;                       V A R I A B L E S
  9. ;;
  10. ;;====================================================================
  11.  
  12. DefineVariables
  13. Text [BaseName] := mystmpc
  14. ;;************************************************************************
  15. ;;
  16. ;;  Variables specific to this module.
  17. ;;  (SDF variables are initialized from an external data file.)
  18. ;;
  19. ;;************************************************************************
  20.  
  21.   Number [UtilMenuSelection]
  22. Text [ProgramGroupDesc] := MYST DEMO
  23. Text [ProgramGroupFile] := 
  24. Number [ProgramGroupItemCount] := 1
  25.   Text [HeaderBitMapFile] := BRODLOGO.BMP
  26.   Text [InfoBitMapFile] := ESC.BMP
  27.   Text [ProductIconFile]
  28. Text [ReadMeFile] := README.TXT
  29. Number [MainSwitchFull] := 0
  30.  
  31.   Number [Yes] := 1
  32.   Number [No] := 0
  33.  
  34.   Number [AcceptValue] := 1
  35.   Number [CancelValue] := 102
  36.  
  37. Logical [ArchiveAvailable] := Y
  38. Logical [ProgramGroupAvailable] := Y
  39.  
  40.   Number [ProgramGroupInstalled]
  41.   Number [ProgramItemsInstalled]
  42.  
  43. ;;*************
  44. ;; these variables are common to the DOS files module
  45. ;;*************
  46.   Number [FilesMenuSelection]
  47.   Text [ExtractionOptions] := ShowJustOne
  48.   Directory [InstallRootDirectory]
  49.   Text [DeleteProductDirFileName] := DELDIRW.EXE
  50.   Text [DeleteKey] := HOBIEJOE
  51.  
  52.   Text [Array1]
  53.   Text [Array2]
  54.   Text [Array3]
  55.   Text [Array4]
  56.   Text [Array5]
  57.   Text [Array6]
  58.  
  59.   Directory [OrigDirectory]
  60.   Directory [Tree]
  61.   Number [TreeLength]
  62.   Logical [TreeDeleted]
  63.  
  64.   Number [Error] := 0
  65.   Number [NoError] := 0
  66.   Number [NoDirectory] := 1
  67.   Number [FilesSkipped] := 2
  68.   Number [NoInstall] := 3
  69.   Number [NoPGInstall] := 4
  70.  
  71. Text [DefaultInstallationDirectory] := MYSTDEMO
  72.   Directory [SavedSelectedInstallDir]
  73.  
  74.   Directory [SelectedInstallDirectory]
  75.   Number [FilesInstalled]             
  76.  
  77. ;;************************************************************************
  78. ;;
  79. ;;  Variables common to all script modules.
  80. ;;  (SDF variables are initialized from and external data file.)
  81. ;;
  82. ;;************************************************************************
  83.   
  84.   Text [ModuleName]
  85.   Text [SDFFileName]
  86.  
  87. Text [ProductName] := Myst Demo
  88.   Text [TechSupportPhoneNumber] := (415) 382-4419
  89.  
  90.   Number [WorkFilesGroup] := 1
  91.  
  92.    Number [Abort]
  93.  
  94.    Logical [UseShadows]
  95.    Text [MainBorder]
  96.    Text [PopupBorder]
  97.    Text [TopLineColors]
  98.    Text [BottomLineColors]
  99.    Text [ShadowColors]
  100.    Text [ScreenColors]
  101.    Text [PopupColors]
  102.  
  103.    Text [AttentionColors]
  104.    Text [NotifyColors]
  105.    Text [StaticInfoColors]
  106.    Text [DynamicInfoColors]
  107.    Text [BackgroundCharacter]
  108.  
  109.    Text [Cdrom] := D
  110. EndDefineVariables
  111.  
  112. ;;=================================================================== 
  113. ;;
  114. ;;                        P R O C E D U R E S
  115. ;;
  116. ;;=================================================================== 
  117.  
  118. [ProductIconFile] := [BaseName].BMP
  119. [ModuleName] := [BaseName].INF
  120. [SDFFileName] := [BaseName].SDF
  121. [ProgramGroupInstalled] := [No]
  122. [ProgramItemsInstalled] := [No]
  123. [FilesInstalled] := [No]
  124.  
  125.  
  126. Do GetWorkFiles
  127. Do SetDisplay
  128. Do ReadSDF
  129. If [Abort] = [Yes]
  130.   Do Abort
  131. EndIf
  132. Do ModuleProcess
  133.  
  134. :EndModule
  135. [Abort] := [No]
  136. Do ExitModule
  137.  
  138.  
  139. ;;==================
  140. ;; Main Module Process
  141. ;;  All module-specific, custom procedures
  142. ;;  should be called from here.
  143. ;;==================
  144.  
  145. Procedure ModuleProcess
  146.  
  147.   Do MainSwitch
  148.  
  149. EndProcedure ;; ModuleProcess
  150.  
  151.  
  152. Procedure MainSwitch
  153.  
  154. :MainSwitchGT
  155.   If [MainSwitchFull] = 1
  156.     [String1] := Utilities
  157.   Else
  158.     [String1] := Help
  159.   EndIf
  160.  
  161.   [Number2] := LengthOf [ProductName]
  162.   [Number3] := 275/2
  163.   [Number4] := [Number3] - [Number2] - [Number2]
  164.   [Number2] := 4 * [Number2]
  165.   DialogBox @xy(CENTERWINDOW,CENTERWINDOW) 275 78 Returns [Number1] NoCaption ModalFrame BorDlg
  166.     BorGroup @xy(10,10) 255 38 "Installation for:"
  167.     LText @xy([Number4],20) [Number2] 8 [ProductName]
  168.     DefPushButton @xy(33,56) 57 14 "INSTALL" 100
  169.     PushButton @xy(184,56) 57 14 "Cancel" 101
  170.     PushButton @xy(116,58) 45 11 [String1] 102
  171.   EndDialogBox
  172.  
  173.   If [Number1] = 100
  174.     Do FullInstall
  175.   EndIf
  176.  
  177.   If [Number1] = 102
  178.     If [MainSwitchFull] = 1
  179.       Do UtilMenu
  180.     Else
  181.       Do ShowHelpInfo
  182.       GoTo MainSwitchGT
  183.     EndIf
  184.   EndIf
  185.  
  186. EndProcedure ;; MainSwitch
  187.  
  188.  
  189. Procedure UtilMenu
  190.  
  191.   [UtilMenuSelection] := 1
  192. :UtilMenuGT
  193.   ClearScreen
  194.  
  195.   [Error] := NoError
  196.   [String1] := BlankString
  197.   GetMenuChoice [DynamicInfoColors] @xy(Center,Center) Highlight [UtilMenuSelection] UseHeader "UTILITIES MENU"
  198.     Deinstall [ProductName]
  199.     ;Deinstall entire product (files, program groups, etc.)
  200.     [String1]
  201.     Install Program Group
  202.     ;Install the program group and program items for
  203.     ;"[ProductName]"
  204.     [String1]
  205.     Install All Files
  206.     ;Install all files required for a full installation
  207.     Install A Single File
  208.     ;Select a single file from the installation disk(s)
  209.     Deinstall All Files
  210.     ;Delete all directories, subdirectories,
  211.     ;and files related to the installation of
  212.     ;"[ProductName]"
  213.     [String1]
  214.     Exit
  215.     ;Exit the installer.
  216.   EndGetMenuChoice
  217.   
  218.   InCase choice is
  219.     =1:  [UtilMenuSelection] := 1
  220.          Do GetSelectedDirectory
  221.          If [Error] <> [NoDirectory]
  222.            Do DeinstallProductFiles
  223.            [ProgramItemsInstalled] := [Yes] ;; this is as far as I'm willing to commit myself
  224.            Do DeinstallProgramGroup
  225.          EndIf 
  226.     =2:  [UtilMenuSelection] := 2
  227.     =3:  [UtilMenuSelection] := 3
  228.          Do GetSelectedDirectory
  229.      If [Error] <> [NoDirectory]
  230.            If [ProgramGroupAvailable] = YesCharacter
  231.              Do ProgramGroupBuild
  232.            Else
  233.              Dialog
  234.            Sorry, but there is no program group for
  235.            "[ProductName]"
  236.              EndDialog
  237.            EndIf
  238.      EndIf
  239.     =4:  [UtilMenuSelection] := 4
  240.     =5:  [UtilMenuSelection] := 5
  241.          If [ArchiveAvailable] = NoCharacter
  242.            Dialog
  243.              Sorry, but the installation for
  244.              "[ProductName]"
  245.          has no files.
  246.            EndDialog
  247.      Else
  248.            Do ExtractAllFiles
  249.          EndIf
  250.     =6:  [UtilMenuSelection] := 6
  251.          If [ArchiveAvailable] = NoCharacter
  252.            Dialog
  253.              Sorry, but the installation for
  254.              "[ProductName]"
  255.          has no files.
  256.            EndDialog
  257.      Else
  258.            Do ExtractSingleFile
  259.          EndIf
  260.     =7:  [UtilMenuSelection] := 7
  261.          If [ArchiveAvailable] = NoCharacter
  262.            Dialog
  263.              Sorry, but the installation for
  264.              "[ProductName]"
  265.          has no files.
  266.            EndDialog
  267.      Else
  268.            Do GetSelectedDirectory
  269.            If [Error] <> [NoDirectory]
  270.          Do DeinstallProductFiles
  271.            EndIf
  272.      EndIf
  273.     =8:  [UtilMenuSelection] := 8
  274.     =9:  [UtilMenuSelection] := 9
  275.          GoTo UtilMenuExit
  276.   EndInCase
  277.  
  278.   GoTo UtilMenuGT
  279. :UtilMenuExit
  280.  
  281. EndProcedure ;; UtilMenu
  282.  
  283.  
  284. Procedure FullInstall
  285.  
  286.   If [ArchiveAvailable] = YesCharacter
  287.     Do ExtractAllFiles
  288.     If [Error] = [NoDirectory] .OR. [Error] = [NoInstall]
  289.       GoTo FullInstallExit
  290.     EndIf
  291.   EndIf
  292.   If [ProgramGroupAvailable] = YesCharacter
  293.     Do ProgramGroupBuild
  294.   EndIf
  295.  
  296.   Do SetProductINIFile
  297.  
  298.   If FileExists [SelectedInstallDirectory]\[ReadMeFile]
  299.     Dialog [YesOrNo1] [StaticInfoColors]
  300.       If you have a Sound Blaster 16 sound card it is important
  301.       that you view the README file before playing Myst.    
  302.             ----------------------------
  303.       Would you like to read the file "[ReadMeFile]" now?
  304.     EndDialog
  305.     If [YesOrNo1] = YesCharacter
  306.       BrowseFile [SelectedInstallDirectory]\[ReadMeFile]
  307.     EndIf
  308.   EndIf
  309.  
  310.   If [Error] = [NoPGInstall]
  311.     Dialog PressAKey
  312.       The icons for "[ProductName]"
  313.       may not exist or may be out of date.
  314.  
  315.       You may have to run the program from
  316.       the Program Manager's "File\Run" menu.
  317.     EndDialog
  318.   EndIf
  319.  
  320.   If [Error] = [NoError]
  321.     Dialog PressAKey [StaticInfoColors]
  322.       You've sucessfully installed
  323.       "[ProductName]"
  324.  
  325.       Have Fun!
  326.     EndDialog
  327.   EndIf
  328.  
  329. :FullInstallExit
  330.  
  331. EndProcedure ;; FullInstall
  332.  
  333.  
  334.  
  335.  
  336. Procedure ProgramGroupBuild
  337.  
  338.   If [ProgramGroupDesc] = BlankString
  339.     [Error] := [NoPGInstall]
  340.     GoTo ProgramGroupBuildExit
  341.   EndIf
  342.  
  343.   [Error] := [NoError]
  344.  
  345.   [Abort] := [Yes]
  346.   [ProgramGroupInstalled] := [Yes]
  347.   Do SetSDF
  348.  
  349.   [Array4] := GetProgramManagerGroupInfo [ProgramGroupDesc]
  350.   If [Array4][1] <> BlankString
  351.     ProgramManagerDDE
  352.       CreateGroup([ProgramGroupDesc])
  353.     EndProgramManagerDDE
  354.     If [ProgramGroupItemCount] = 0
  355.       Dialog PressAKey [StaticInfoColors]
  356.         The program group "[ProgramGroupDesc]"
  357.     has been installed.
  358.       EndDialog
  359.       GoTo ProgramGroupBuildExit
  360.     EndIf
  361.   EndIf
  362.  
  363.   ClearScreen
  364.   TextBox [StaticInfoColors]
  365.     Installing program icons. One moment please...
  366.   EndTextBox
  367.   Do BuildPGIAddArray ;; fill [Array2] with program group item names
  368.  
  369.   [Number1] := 0
  370.   [Number3] := 1
  371.   While [Number1] < [ProgramGroupItemCount]
  372.     IncrementNumber [Number1]
  373.     [YesOrNo1] := NoCharacter
  374.  
  375.     [String10] := [Array2][[Number1]]
  376.     [Number2] := [Number1] + 1
  377.     [Number4] := 0
  378.     While [Number4] < [ProgramGroupItemCount] .AND. [YesOrNo1] = NoCharacter
  379.       IncrementNumber [Number4]
  380.       [Number5] := [Number4] + 1
  381.       [String11] := [Array4][[Number5]]
  382.  
  383.       If [String11] Contains [String10]
  384.         [YesOrNo1] := YesCharacter
  385.       Else
  386.         [YesOrNo1] := NoCharacter
  387.       EndIf
  388.     EndWhile
  389.  
  390.     If [YesOrNo1] = YesCharacter
  391.       [Array5][[Number3]] := [Array2][[Number1]]
  392.       IncrementNumber [Number3]
  393.     Else
  394.       ProgramManagerDDE
  395.         CreateGroup([ProgramGroupDesc])
  396.         ReplaceItem([String10])
  397.     AddItem ([Array3][[Number1]])
  398.       EndProgramManagerDDE
  399.     EndIf
  400.   EndWhile
  401.  
  402.   ClearScreen
  403.   If [Array5][1] <> BlankString
  404.     [String2] := [ProgramGroupDesc]
  405.     DialogBox @xy(CENTER,CENTER) 268 120 Returns [Number2] UseHeader "Icon List"
  406.       LText @xy(35,10) 198 8 "The following icons should to be replaced in the program group"
  407.       LText @xy(35,20) 198 8 [ProgramGroupDesc]
  408.       ListBox @xy(10,32) 248 32 Uses [Array6] LoadWith [Array5] multiplesel Border
  409.       LText @xy(33,69) 98 8 "'Replace' replaces the icons,"
  410.       LText @xy(33,79) 202 8 "'Skip' leaves the old icons and does not install the new ones."
  411.       DefPushButton @xy(91,96) 38 14 "Replace" [AcceptValue]
  412.       PushButton @xy(139,96) 38 14 "Skip" [CancelValue]
  413.     EndDialogBox
  414.  
  415.     If [Number2] = [AcceptValue]
  416.       [Number1] := 1
  417.       While [Array2][[Number1]] <> BlankString
  418.         ProgramManagerDDE
  419.           CreateGroup([ProgramGroupDesc])
  420.           ReplaceItem([Array2][[Number1]])
  421.           AddItem ([Array3][[Number1]])
  422.         EndProgramManagerDDE
  423.         IncrementNumber [Number1]
  424.       EndWhile
  425.     Else
  426.       [Error] := [NoPGInstall]
  427.       GoTo ProgramGroupBuildExit
  428.     EndIf
  429.   EndIf
  430.  
  431.   If [ProgramGroupItemCount] > 0
  432.     Dialog PressAKey [StaticInfoColors]
  433.       The icons for "[ProductName]"
  434.       have been installed in the program group
  435.       "[ProgramGroupDesc]"
  436.     EndDialog
  437.   EndIf
  438.  
  439. :ProgramGroupBuildExit
  440.   ClearScreen
  441.  
  442. EndProcedure ;; ProgramGroupBuild
  443.  
  444.  
  445.  
  446.  
  447. Procedure DeinstallProgramGroup
  448.  
  449.   If [ProgramGroupDesc] = BlankString
  450.     GoTo DeinstallProgramGroupExit
  451.   EndIf
  452.   If FileExists [WindowsDirectory]\[ProgramGroupFile]
  453.   Else
  454.     GoTo DeinstallProgramGroupExit
  455.   EndIf
  456.  
  457.   If [ProgramGroupInstalled] = [Yes]
  458.     Dialog [YesOrNo1] [StaticInfoColors]
  459.       Remove the program group "[ProgramGroupDesc]"?
  460.     EndDialog
  461.     If [YesOrNo1] = NoCharacter
  462.       GoTo DeinstallProgramGroupExit
  463.     EndIf
  464.     ProgramManagerDDE
  465.       DeleteGroup([ProgramGroupDesc])
  466.     EndProgramManagerDDE
  467.     [ProgramGroupInstalled] := [No]
  468.     GoTo DeinstallProgramGroupExit
  469.   EndIf
  470.  
  471.   If [ProgramItemsInstalled] = [Yes]
  472.     Dialog [YesOrNo1] [StaticInfoColors]
  473.       Remove the installed program items from the program group
  474.       "[ProgramGroupDesc]"?
  475.     EndDialog
  476.     If [YesOrNo1] = NoCharacter
  477.       GoTo DeinstallProgramGroupExit
  478.     EndIf
  479.     Do DeletePGI
  480.     [ProgramItemsInstalled] := [No]
  481.   EndIf
  482.  
  483. :DeinstallProgramGroupExit
  484.  
  485. EndProcedure ;; DeinstallPG
  486.  
  487.  
  488.  
  489. Procedure DDENonfatalErrorTrap
  490. EndProcedure ;; DDENonfatalErrorTrap
  491.  
  492.  
  493.  
  494. Procedure RetrieveFirstMedia
  495.  
  496. ;; Important Note: make sure that file MEDIA1.TAG 
  497. ;; is the first file indicated in the ".pvd" file.
  498. ;; This will ensure that the first diskette is
  499. ;; reinserted by the user.
  500.  
  501.   SetReplacementInquiry Off
  502.   QueFiles to ShadowDirectory
  503.     MEDIA1.TAG
  504.   EndQueFiles
  505.   GetQuedFiles Quietly
  506.   DeleteFiles from ShadowDirectory Quietly
  507.     MEDIA1.TAG
  508.   EndDeleteFiles
  509.  
  510. EndProcedure ;; RetrieveFirstMedia
  511.  
  512. ;;=========================
  513. ;; ExtractAllFiles
  514. ;;  Extracts all files from the archive.
  515. ;;  If user skips certain files during installation
  516. ;;  (e.g., because they're duplicates) we inform
  517. ;;  them of possible version incompatibility of
  518. ;;  product.
  519. ;;=========================
  520.  
  521. Procedure ExtractAllFiles
  522.  
  523.   QueAllFiles
  524.   UnQueFileGroup [WorkFilesGroup]
  525.   Do GetInstallDirectory
  526.  
  527.   If [Error] = [NoDirectory]
  528.     GoTo ExtractAllFilesExit
  529.   EndIf
  530.   If QueSize = 0
  531.     CreateDirectoryIfNecessary [SelectedInstallDirectory]
  532.     GoTo ExtractAllFilesExit
  533.   EndIf
  534.  
  535.   Do AssignAddTreeArray
  536.   If [Array1][2] <> BlankString
  537.     [String2] := [InstallRootDirectory]
  538.     DialogBox @xy(CENTER,CENTER) 268 100 Returns [Number1] UseHeader "Install Directory List"
  539.       LText @xy(46,10) 162 8 "The following directories will be installed on drive"
  540.       LText @xy(210,10) 12 8 [String2]
  541.       ListBox @xy(10,22) 248 32 Uses [String1] LoadWith [Array1] Border
  542.       LText @xy(38,58) 191 8 "Press OK to continue or Cancel to return to the main menu."
  543.       DefPushButton @xy(91,76) 38 14 "OK" [AcceptValue]
  544.       PushButton @xy(139,76) 38 14 "Cancel" [CancelValue]
  545.     EndDialogBox
  546.   EndIf
  547.  
  548.   If [Number1] = [CancelValue]
  549.     [Error] := [NoInstall]
  550.     GoTo ExtractAllFilesExit
  551.   EndIf
  552.  
  553.   [Abort] := [Yes]
  554.   [FilesInstalled] := [Yes]
  555.   Do SetSDF
  556.  
  557.   GetQuedFiles [ExtractionOptions]
  558.  
  559.   If QueSize <> 0  ;; Some files were not installed
  560.     [Error] := [FilesSkipped]
  561.     Dialog PressAKey [StaticInfoColors]
  562.       Some files were selected but not installed.
  563.  
  564.       This might cause problems when running
  565.       "[ProductName]",
  566.       if the skipped files are incompatible with
  567.       the version just installed.
  568.     EndDialog
  569.   Else
  570.     Dialog 2000 [StaticInfoColors]
  571.       All files for "[ProductName]"
  572.       have installed successfully.
  573.     EndDialog
  574.   EndIf
  575.  
  576.   Do RetrieveFirstMedia
  577.  
  578. :ExtractAllFilesExit
  579.   UnqueAllFiles
  580.  
  581. EndProcedure ;; ExtractAllFiles
  582.  
  583.  
  584. ;;=========================
  585. ;; GetInstallDirectory
  586. ;;  The target directory structure can be:
  587. ;;  single directory - all data installed on
  588. ;;    user's disk in a single directory (not the root)
  589. ;;  multiple directory - more than one directory
  590. ;;    is installed off of the root
  591. ;;=========================
  592.  
  593. Procedure GetInstallDirectory
  594.  
  595. :GetInstallDirectoryEnter
  596.   [Error] := [NoDirectory]
  597.   DetermineInstallationDrive QueSize RequireFixed
  598.   [String10] := InstallationDrive
  599.   [Number10] := FreeSpaceOnDrive [String10]
  600.   If [Number10] < QueSize
  601.     Dialog [YesOrNo1] UseHeader "Insufficient Disk Space"
  602.       "[ProductName]" requires QueSize bytes.
  603.       Drive "[String10]" only has [Number10] bytes.
  604.  
  605.       Select a different drive?
  606.     EndDialog
  607.     If [YesOrNo1] = YesCharacter
  608.       GoTo GetInstallDirectoryEnter
  609.     Else
  610.       GoTo GetInstallDirectoryExit2
  611.     EndIf
  612.   EndIf
  613.  
  614.   If [DefaultInstallationDirectory] = BlankString
  615.     GoTo GetInstallDirectoryExit
  616.   EndIf
  617.  
  618.   [InstallationDirectory] := InstallationDrive:\[DefaultInstallationDirectory]
  619.   DetermineInstallationDirectory [InstallationDirectory] QueSize NoCreate
  620.  
  621.   [Number1] := LengthOf [InstallationDirectory] 
  622.   If [Number1] < 4
  623.   ;; specified target directory is root
  624.     Dialog [PressAKey] [AttentionColors] ;; Can't install to root directory
  625.       Sorry, but you cannot install directly to the root directory "[InstallationDirectory]"
  626.     EndDialog
  627.     GoTo GetInstallDirectoryExit2
  628.   EndIf
  629.  
  630.   If DirectoryExists [InstallationDirectory]
  631.   Else
  632.     GoTo GetInstallDirectoryExit
  633.   EndIf
  634.  
  635.   Dialog [YesOrNo1] [StaticInfoColors] ;; Installation directory already exists notice
  636.     Files will be installed to the directory
  637.     "[InstallationDirectory]"
  638.         
  639.     Since this directory already exists, files
  640.     with the same names will be overwritten.
  641.  
  642.     Do you want to install to the directory
  643.     "[InstallationDirectory]"?
  644.   EndDialog
  645.   If [YesOrNo1] = NoCharacter
  646.     GoTo GetInstallDirectoryExit2
  647.   EndIf
  648.  
  649.   Dialog [YesOrNo1] [StaticInfoColors]
  650.     Do you wish to be prompted before any duplicate files are replaced? 
  651.   EndDialog
  652.   If [YesOrNo1] = YesCharacter
  653.     SetReplacementInquiry On
  654.   Else
  655.     SetReplacementInquiry Off
  656.   EndIf
  657.  
  658. :GetInstallDirectoryExit
  659.   [SelectedInstallDirectory] := [InstallationDirectory]
  660.   [SavedSelectedInstallDir] := [InstallationDirectory]
  661.   [String1] := [InstallationDirectory]
  662.   [String2] := SubStringOf [String1] from 1 to 3
  663.   [InstallRootDirectory] := [String2]
  664.   [InstallationDirectory] := [String2] ;; set install dir to root
  665.   [String1] := SubStringOf [String1] from 4 to End
  666.   [Dir1] := [String1] ;; InstallationDirectory without the drive
  667.  
  668.   [Error] := [NoError]
  669.  
  670. :GetInstallDirectoryExit2
  671.  
  672. EndProcedure ;; GetInstallDirectory
  673.  
  674.  
  675. Procedure GetSelectedDirectory
  676.  
  677.   [Error] := [NoDirectory]
  678.   If [SelectedInstallDirectory] = BlankString
  679.     DetermineInstallationDrive QueSize RequireFixed
  680.     [Dir10] := InstallationDrive:\[DefaultInstallationDirectory]
  681.   Else
  682.     [Dir10] := [SelectedInstallDirectory]
  683.   EndIf
  684.  
  685.   Dialog [Dir10] [DynamicInfoColors] UpperCase
  686.     Verify the default installation directory below and press <ENTER>.
  687.   EndDialog
  688.  
  689.   [Number1] := LengthOf [Dir10] 
  690.   If [Number1] < 4
  691.   ;; specified target directory is root
  692.     Dialog [PressAKey] [AttentionColors] ;; Can't deal directly with root directory
  693.       Sorry, but you must indicate a directory below the root directory "[Dir10]"
  694.     EndDialog
  695.     [Dir1] := BlankString
  696.     GoTo GetSelectedDirectoryExit
  697.   EndIf
  698.  
  699.   If DirectoryExists [Dir10]
  700.     GoTo GetSelectedDirectoryExit
  701.   EndIf
  702.  
  703.   Dialog PressAKey [StaticInfoColors] ;; Directory does not exist
  704.     The directory "[Dir10]"
  705.     doesn't exist.    
  706.   EndDialog
  707.   [Dir1] := BlankString
  708.   GoTo GetSelectedDirectoryExit
  709.  
  710. :GetSelectedDirectoryExit
  711.   [SelectedInstallDirectory] := [Dir10]
  712.   [String1] := [Dir10]
  713.   [String2] := SubStringOf [String1] from 1 to 3
  714.   [InstallRootDirectory] := [String2]
  715.   [Dir10] := [String2]
  716.   [String1] := SubStringOf [String1] from 4 to End
  717.   [Dir1] := [String1] ;; InstallationDirectory without the drive
  718.  
  719.   [Error] := [NoError]
  720.  
  721. :GetSelectedDirectoryExit2
  722.  
  723. EndProcedure ;; GetSelectedDirectory
  724.  
  725.  
  726. ;;===========================
  727. ;; ExtractSingleFile
  728. ;;===========================
  729.  
  730. Procedure ExtractSingleFile
  731.  
  732.   [String1] := BlankString
  733. :ExtractSingleFileGT
  734.   DialogBox @xy(CENTER,CENTER) 135 76 Returns [Number1] UseHeader "Select A File"
  735.     LText @xy(5,10) 120 10 "Enter the file name (without the path)."
  736.     EditText @xy(26,25) 83 12 Uses [String1] Border UpperCase
  737.     DefPushButton @xy(19,52) 38 14 "Accept" [AcceptValue]
  738.     PushButton @xy(77,52) 38 14 "Cancel" [CancelValue]
  739.   EndDialogBox
  740.  
  741.   If [Number1] = [CancelValue]
  742.     GoTo ExtractSingleFileExit
  743.   EndIf
  744.   If [String1] = BlankString
  745.     GoTo ExtractSingleFileGT
  746.   EndIf
  747.  
  748.   If [String1] contains \
  749.     Popup Please enter just the file name with no path.
  750.     GoTo ExtractSingleFileGT
  751.   EndIf
  752.   If FileIsInLibrary [String1]
  753.   Else
  754.     Popup Cannot find a file named [String1]
  755.     GoTo ExtractSingleFileGT
  756.   EndIf
  757.   QueFiles
  758.     [String1]
  759.   EndQueFiles
  760.     
  761.   Do GetSelectedDirectory
  762.   If [Error] = [NoDirectory]
  763.     UnQueFiles
  764.       [String1]
  765.     EndUnQueFiles
  766.     GoTo ExtractSingleFileExit
  767.   EndIf
  768.   SetReplacementInquiry On
  769.   GetQuedFiles [ExtractionOptions]
  770.  
  771.   Do RetrieveFirstMedia
  772.  
  773. :ExtractSingleFileExit
  774.  
  775. EndProcedure ;; ExtractSingleFile
  776.  
  777.  
  778.  
  779.             
  780. ;;=============================
  781. ;; DeinstallProductFiles
  782. ;;=============================
  783.  
  784. Procedure DeinstallProductFiles
  785.  
  786.   Do AssignAddTreeArray
  787.  
  788.   [OrigDirectory] := CurrentDirectory
  789.   Dialog [YesOrNo1] [AttentionColors] UseHeader "DIRECTORY DELETION NOTICE"
  790.     Delete the files and directories for
  791.     "[ProductName]"?
  792.   EndDialog
  793.  
  794.   If [YesOrNo1] = NoCharacter
  795.     GoTo DeinstallProductFilesExit
  796.   EndIf
  797.  
  798.   [Number1] := 1
  799.   While [Array1][[Number1]] <> BlankString
  800.     [Tree] := [InstallRootDirectory][Array1][[Number1]]
  801.     Do DeleteTree
  802.  
  803.     If [TreeDeleted] = YesCharacter
  804.       [FilesInstalled] := [No]
  805.     Else
  806.       [FilesInstalled] := [Yes]
  807.     EndIf
  808.  
  809.     If Windows
  810.       ;;"DirectoryIsEmpty" does not work in Instalit for Windows
  811.     Else
  812.       Do DeleteNextLevel
  813.     EndIf
  814.     IncrementNumber [Number1]
  815.   EndWhile
  816.  
  817. :DeinstallProductFilesExit
  818.   ChangeDirectoryTo [OrigDirectory]
  819.  
  820. EndProcedure ;; DeinstallProductFiles
  821.  
  822.  
  823. Procedure DeleteTree
  824.  
  825.   [TreeDeleted] := NoCharacter
  826.   If DirectoryExists [Tree]
  827.   Else
  828.     [TreeDeleted] := YesCharacter
  829.     GoTo DeleteTreeExit
  830.   EndIf
  831.  
  832.   ClearScreen
  833.  
  834.   [TreeLength] := LengthOf [Tree]
  835.   If [TreeLength] < 4
  836.     GoTo DeleteTreeExit
  837.   EndIf
  838.   If [Tree] = [WindowsDirectory]
  839.     GoTo DeleteTreeExit
  840.   EndIf
  841.   If [Tree] = [WindowsSystemDirectory]
  842.     GoTo DeleteTreeExit
  843.   EndIf
  844.  
  845.   Dialog [YesOrNo1] [AttentionColors] UseHeader "DIRECTORY DELETION NOTICE"
  846.     Delete the directory
  847.     "[Tree]"
  848.     including all its files and subdirectories?
  849.   EndDialog
  850.   If [YesOrNo1] = NoCharacter
  851.     GoTo DeleteTreeExit
  852.   EndIf
  853.  
  854.   ClearScreen
  855.   TextBox [StaticInfoColors]  ;; Deinstall product files and inst. dir.
  856.     Deleting directory
  857.     "[Tree]"...
  858.   EndTextBox
  859.  
  860.   ChangeDirectoryTo [Tree]
  861.   Run ShadowDirectory\[DeleteProductDirFileName] [DeleteKey] Quietly SwapOut
  862.   ClearScreen
  863.  
  864.   If OSErrorCode <> 0
  865.     Dialog PressAKey
  866.       Cannot delete files and directories for
  867.       "[ProductName]".
  868.     EndDialog
  869.     GoTo DeleteTreeExit
  870.   EndIf
  871.  
  872.   [TreeDeleted] := YesCharacter
  873.  
  874. :DeleteTreeExit
  875.  
  876. EndProcedure ;; DeleteTree
  877.  
  878.  
  879. Procedure DeleteNextLevel
  880.  
  881. :DeleteNextLevelGT
  882.   [TreeLength] := LengthOf [Tree]
  883.   [String1] := BlankString
  884.   While [String1] <> "\" .AND. [TreeLength] > 3
  885.     [TreeLength] := LengthOf [Tree]
  886.     [String1] := SubstringOf [Tree] from [TreeLength] to End
  887.     DecrementNumber [TreeLength]
  888.     [Tree] := SubstringOf [Tree] from Beginning to [TreeLength]
  889.   EndWhile
  890.  
  891.   If [TreeLength] < 4
  892.     GoTo DeleteNextLevelExit
  893.   EndIf
  894.  
  895.   If DirectoryIsEmpty [Tree]
  896.     Dialog [YesOrNo1] [StaticInfoColors]
  897.       The directory "[Tree]" is empty.
  898.       Shall we delete it?
  899.     EndDialog
  900.     If [YesOrNo1] = YesCharacter
  901.       DeleteDirectory [Tree]
  902.     Else
  903.       GoTo DeleteNextLevelExit
  904.     EndIf
  905.   Else
  906.     GoTo DeleteNextLevelExit
  907.   EndIf
  908.   GoTo DeleteNextLevelGT
  909.  
  910. :DeleteNextLevelExit
  911.  
  912. EndProcedure ;; DeleteNextLevel
  913.  
  914. ;;************************************
  915. ;;  The following procedures are common to
  916. ;;  all script modules for the Broderbund
  917. ;;  Installer Package for DOS/MOHAWK.
  918. ;; 
  919. ;;  These procedures will probably require
  920. ;;  customization.
  921. ;;************************************
  922.  
  923.  
  924. ;;==================
  925. ;; ReadSDF
  926. ;;  Read information from the sdf.
  927. ;;  Customization should occure in the 
  928. ;;  "Module-Specific Variables" section.
  929. ;;  No other modifications should be made
  930. ;;  to this procedure.
  931. ;;==================
  932.  
  933. Procedure ReadSDF
  934.  
  935.   If FileExists [InstallFromDirectory]\[SDFFileName]
  936.   Else
  937.     GoTo ReadSDFExit
  938.   EndIf
  939.  
  940.   TextBox @xy(Center,Center) ;; Getting custom information...
  941.     Getting custom information...one moment, please.
  942.   EndTextBox
  943.  
  944.   CopyFiles from [InstallFromDirectory] to ShadowDirectory Quietly
  945.     [SDFFileName]
  946.   EndCopyFiles
  947.  
  948.   ExamineTextFile ShadowDirectory\[SDFFileName]
  949.  
  950.   [Abort] := SettingFor Abort
  951.  
  952.   [FilesInstalled] := SettingFor FilesInstalled
  953.   [ProgramGroupInstalled] := SettingFor ProgramGroupInstalled
  954.   [ProgramItemsInstalled] := SettingFor ProgramItemsInstalled
  955.   [String1] := SettingFor SelectedInstallDirectory
  956. ;;  If [String1] <> BlankString
  957.     [SelectedInstallDirectory] := [String1]
  958. ;;  EndIf
  959.  
  960.   ForgetTextFile
  961. :ReadSDFExit
  962.  
  963. EndProcedure ;; ReadSDF
  964.  
  965.  
  966. Procedure SetSDF
  967.  
  968.   ModifyTextFile ShadowDirectory\[SDFFileName] Quietly NoBackup
  969.     AddOrChangeLineWith (Abort,=,) as "Abort=[Abort]" at End
  970.     AddOrChangeLineWith (FilesInstalled,=,) as "FilesInstalled=[FilesInstalled]" At End
  971.     AddOrChangeLineWith (SelectedInstallDirectory,=,) as "SelectedInstallDirectory=[SavedSelectedInstallDir]" At End
  972.     AddOrChangeLineWith (ProgramGroupInstalled,=,) as "ProgramGroupInstalled=[ProgramGroupInstalled]" At End
  973.     AddOrChangeLineWith (ProgramItemsInstalled,=,) as "ProgramItemsInstalled=[ProgramItemsInstalled]" At End
  974.   EndModifyTextFile
  975.  
  976. EndProcedure ;; SetSDF
  977.  
  978.  
  979. ;;==================
  980. ;; ExitModule
  981. ;;  Perform the last tasks required
  982. ;;  before quiting this module.
  983. ;;  This procedure is called in all
  984. ;;  circumstances, whether the module
  985. ;;  is terminating normally, or being
  986. ;;  aborted.
  987. ;;==================
  988.  
  989. Procedure ExitModule
  990.  
  991. ;;^^^^^^^^^^^^^^^^^^^^^^^^^
  992. ;;  Do not modify this block
  993. ;;----------------------------
  994.  
  995.   Do SetSDF
  996.  
  997. ;;^^^^^^^^^^^^^^^^^^^^^^^^^
  998.  
  999.   DeleteFiles from ShadowDirectory Quietly
  1000.     [HeaderBitMapFile]
  1001.     [InfoBitMapFile]
  1002.     [ProductIconFile]
  1003.     [SDFFileName]
  1004.     [DeleteProductDirFileName]
  1005.   EndDeleteFiles
  1006.  
  1007.   If [InstallationDirectory] <> BlankString
  1008.   DeleteFiles from [InstallationDirectory] Quietly
  1009.     [HeaderBitMapFile]
  1010.     [InfoBitMapFile]
  1011.     [ProductIconFile]
  1012.     [SDFFileName]
  1013.     [DeleteProductDirFileName]
  1014.     MEDIA1.TAG
  1015.   EndDeleteFiles
  1016.   EndIf
  1017.  
  1018.   SoLong
  1019.  
  1020. EndProcedure ;; ExitModule
  1021.  
  1022.  
  1023. ;;==================
  1024. ;; Abort
  1025. ;;  In this procedure, place your
  1026. ;;  custom code right before the call
  1027. ;;  to "Exit Module".
  1028. ;;  Perform tasks relating to abortion of
  1029. ;;  this modules processes *only*.
  1030. ;;==================
  1031.  
  1032. Procedure Abort
  1033.  
  1034.   ;;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
  1035.   ;;  This block should remain unaltered.
  1036.   ;;..............................
  1037.  
  1038.   [Abort] := [Yes]
  1039.   
  1040.   ClearScreen
  1041.   TextBox [AttentionColors]
  1042.     Aborting Installation Process...
  1043.   EndTextBox
  1044.  
  1045.   ;;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  1046.   ;;  Custom script should be placed here,
  1047.   ;;  before the call to "ExitModule.
  1048.   ;;..............................
  1049.  
  1050.   UnqueAllFiles ;; Remove uninstalled files from que
  1051.     
  1052.   If [FilesInstalled] = [Yes]
  1053.     Do DeinstallProductFiles
  1054.   EndIf
  1055.   Do DeinstallProgramGroup
  1056.  
  1057.   Do ExitModule
  1058.  
  1059. EndProcedure ;; Abort
  1060.  
  1061.  
  1062.  
  1063.  
  1064. ;;************************************
  1065. ;;  The following procedures are common to
  1066. ;;  all script modules for the Broderbund
  1067. ;;  Installer Package for DOS/MOHAWK.
  1068. ;; 
  1069. ;;  These procedures should not be altered.
  1070. ;;************************************
  1071.  
  1072.  
  1073.  
  1074. ;;================================
  1075. ;; ShowHelpInfo
  1076. ;;================================
  1077.  
  1078. Procedure ShowHelpInfo
  1079.  
  1080.   Dialog PressAKey [StaticInfoColors]
  1081.     You are installing
  1082.     "[ProductName]".
  1083.  
  1084.     Description of buttons on main dialog:
  1085.  
  1086.     INSTALL - press this button to install all necessary product files,
  1087.     directories, and icons.
  1088.  
  1089.     Cancel - press this button to exit the installer.
  1090.   EndDialog
  1091.  
  1092. EndProcedure ;; ShowHelpInfo
  1093.  
  1094.  
  1095. Procedure GetWorkFiles
  1096.  
  1097.   QueFileGroup [WorkFilesGroup] to ShadowDirectory
  1098.   GetQuedFiles Quietly
  1099.  
  1100. EndProcedure ;; GetWorkFiles
  1101.  
  1102.  
  1103. Procedure SetDisplay
  1104.  
  1105. [UseShadows] := YesCharacter
  1106. [MainBorder] := None
  1107. [PopupBorder] := Single
  1108. [TopLineColors] := WhiteOnBlue
  1109. [BottomLineColors] := WhiteOnLightGray
  1110. [ShadowColors] := DarkGrayOnBlack
  1111. [ScreenColors] := WhiteOnBlue
  1112. [PopupColors] := BlueOnWhite
  1113.  
  1114. [AttentionColors] := WhiteOnRed
  1115. [NotifyColors] := WhiteOnBrown
  1116. [StaticInfoColors] := BlueOnWhite
  1117. [DynamicInfoColors] := BlueOnYellow
  1118. [BackgroundCharacter] := B0
  1119.  
  1120.   If [UseShadows] = YesCharacter
  1121.     SetShadows On
  1122.   else
  1123.     SetShadows Off
  1124.   EndIf
  1125.  
  1126.   If Windows
  1127.   ;;  SetBackdrop off
  1128.   ;;  SetBackgroundColor 255 255 255 255 255 255
  1129.     SetDefaultBitmap off
  1130.     ShowWindow Maximize
  1131.   Else
  1132.     SetAllowExit        Off
  1133.     SetBackgroundCharTo [BackgroundCharacter]
  1134.     SetBottomLineAttrTo [BottomLineColors]
  1135.     SetTopLineAttrTo    [TopLineColors]
  1136.   EndIf
  1137.  
  1138.   SetAttentionAttrTo  [AttentionColors]
  1139.   SetMainBorderTo     [MainBorder]
  1140.   SetPopupAttrTo      [PopupColors]
  1141.   SetPopupBorderTo    [PopupBorder]
  1142.   SetScreenAttrTo     [ScreenColors]
  1143.   SetShadowAttrTo     [ShadowColors]
  1144.   SetTopLineTo        Installation For: [ProductName]
  1145.  
  1146.   [Number1] := MaxX
  1147.   [Number1] := [Number1]/2
  1148.   [Number1] := [Number1] - 86
  1149.   LoadBitMap 1 ShadowDirectory\[HeaderBitMapFile]
  1150.   ShowBitMap 1 @xy([Number1],10)
  1151.  
  1152.   [Number1] := MaxX
  1153.   [Number1] := [Number1]/2
  1154.   [Number1] := [Number1] - 226
  1155.   [Number2] := MaxY
  1156.   [Number2] := [Number2] - 80
  1157.   LoadBitMap 2 ShadowDirectory\[InfoBitMapFile]
  1158.   ShowBitMap 2 @xy([Number1],[Number2])
  1159.  
  1160.   If FileExists ShadowDirectory\[ProductIconFile]
  1161.     LoadBitMap 3 ShadowDirectory\[ProductIconFile]
  1162.     ShowBitMap 3 @xy(10,10)
  1163.   EndIf
  1164.  
  1165. EndProcedure ;; SetDisplay
  1166.  
  1167. Procedure SetProductINIFile
  1168. :Again  
  1169.   DialogBox @xy(CENTER,CENTER) 135 76 Returns [Number2] UseHeader "CD ROM drive unit"
  1170.     LText @xy(5,10) 120 10 "Insert the letter of the CDROM drive."
  1171.     EditText @xy(26,25) 83 12 Uses [Cdrom] Border UpperCase
  1172.     DefPushButton @xy(19,52) 38 14 "Accept" [AcceptValue]
  1173.     PushButton @xy(77,52) 38 14 "Cancel" [CancelValue]
  1174.   EndDialogBox
  1175.  
  1176. if [Number2] = [AcceptValue]
  1177.     [Number1] := LengthOf [Cdrom]
  1178.     If [Number1] <> 1 .OR. [Cdrom] < A .OR. [Cdrom] > Z
  1179.         Dialog [PressAKey] [AttentionColors]
  1180.         Sorry, invalid CD ROM unit letter
  1181.         EndDialog
  1182.         GoTo Again
  1183.     EndIf
  1184.       If FileExists [Cdrom]:\slides.dat
  1185.         DeleteFiles from [SelectedInstallDirectory]
  1186.         MYST.INI
  1187.         EndDeleteFiles
  1188.         ModifyTextFile [SelectedInstallDirectory]\MYST.INI
  1189.         InsertAtLine End [MystMPCDrive]
  1190.         InsertAtLine End Drive=[Cdrom]
  1191.         InsertAtLine End 
  1192.         InsertAtLine End [Volume]
  1193.         InsertAtLine End 
  1194.         InsertAtLine End 
  1195.         EndModifyTextFile
  1196.       else 
  1197.         Dialog [PressAKey] [AttentionColors]
  1198.         Sorry, invalid CD ROM unit letter or
  1199.         the CD ROM on the unit [Cdrom]:\ is
  1200.         not MYST MPC CD
  1201.         EndDialog
  1202.         GoTo Again
  1203.       
  1204.       EndIf
  1205. else
  1206.     Do Abort
  1207. EndIf
  1208.  
  1209. EndProcedure;;SetProductINIFile
  1210.     
  1211. Procedure AssignAddTreeArray
  1212. [Array1][1] := [Dir1]
  1213. EndProcedure;;AssignAddTreeArray
  1214.  
  1215. Procedure BuildPGIAddArray
  1216. [Array2][1] := Myst Demo
  1217. [Array3][1] := [SelectedInstallDirectory]\MYSTDEMO.EXE,Myst Demo
  1218. [Array2][2] := The Making of Myst
  1219. [Array3][2] := [SelectedInstallDirectory]\MAKING.EXE,The Making of Myst
  1220. EndProcedure;;BuildPGIAddArray
  1221. Procedure DeletePGI
  1222. ProgramManagerDDE
  1223. CreateGroup(Broderbund Software,)
  1224. EndProgramManagerDDE
  1225. EndProcedure;;DeletePGI
  1226.